'use strict'

const http=require("http");


let html=`
        <!DOCTYPE html>
            <html>
                <head>
                    <title>First Sever</title>
                </head>
                <body>
                    <div>Node.js in service.</div>
                </body>
            </html>
        `


let serv=http.createServer((request,response)=>{
    //! 计算buffer总长度
    let bufferList=[];
    let totalLength=0;

    request.on('data',chunk=>{
        totalLength+=chunk.length
        bufferList.push(chunk)
    })
    let bodyData=null;

    //! data获取完之后，触发事件
    request.on('end',()=>{
        //? console.log(request.url,request.headers,request.method);
        //? if(request.url!=='/x/y/z'){
        //?     response.statusCode=404;
        //?     response.end('page not found')
        //?     return 
        //? }
        
        
        if(bufferList.length>0){
                //! 将buffer小片段拼接起来     如果没有提供 totalLength ，
                //! 它将计算 list 中的 Buffer（以获得该值）。然而，这增加了额外的函数循环，提供精准的长度将加速计算。
            bodyData=Buffer.concat(bufferList,totalLength);
        }
        bufferList=[];//! 清空bufferList数组，释放内存

        //! 当接收完数据后，才能判断数据
        if(bodyData){
            //? text/plain的意思是将文件设置为纯文本的形式，浏览器在获取到这种文件时并不会对其进行处理。
            response.setHeader('content-type','text/plain; charset=utf-8')
            response.end(bodyData)
        }else{
            //? text/html的意思是将文件的content-type设置为text/html的形式，
            //? 浏览器在获取到这种文件时会自动调用html的解析器对文件进行相应的处理。
            response.setHeader('content-type','text/html; charset=utf-8')
            response.end(html)
        }
    })


    request.on('data',chunk=>{
        console.log(chunk.toString())
    })

    console.log(request);

    response.setHeader('content-type','text/html; charset=utf-8')
    response.end(html);
})

serv.listen(3456)